package com.masita.logica;

import java.sql.*;
import java.util.Vector;

public class Cliente {
	
	private int id_cliente;
	private String nombre;
	private String dni;
	private String domicilio;
	private String telefono;
	private String email;
	private String fecha_nac;
	
	private int id_ciudad;
	private String ciudad;
	
	public Cliente(int id, String nom, String dni, String dom, String tel,
				   String email, String fecha_nac, int id_c){
		
		this.id_cliente = id;
		this.nombre = new String(nom);
		this.dni = new String(dni);
		this.domicilio = new String(dom);
		this.telefono = new String(tel);
		this.email = new String(email);
		this.fecha_nac = new String(fecha_nac);
		this.id_ciudad = id_c;
		this.ciudad = null;
	}
	
	// METODOS GET Y SET **********************************

	public String getDni(){
		return dni;
	}

	public String getDomicilio(){
		return domicilio;
	}

	public String getEmail() {
		return email;
	}

	public String getFecha_nac() {
		return fecha_nac;
	}

	public int getIdCliente() {
		return id_cliente;
	}

	public String getNombre() {
		return nombre;
	}

	public String getTelefono() {
		return telefono;
	}

	public int getIdCiudad(){
		return id_ciudad;
	}

	public String getCiudad(){
		if( this.ciudad == null ){
			try{
				Statement st = Conexion.getStatement();
				String sentencia = "SELECT ciudad FROM ciudad "+								   "WHERE id_ciudad = "+this.id_ciudad; 
				ResultSet rs = st.executeQuery(sentencia);
				if( rs.next() ) ciudad = new String(rs.getString(1));
			}
			catch(SQLException e){
				System.out.println(e.getMessage());
			}
		}			
		return this.ciudad;
	}

	// METODOS SET ****************************************
	public void setDni(String string){
		dni = new String(string);
	}

	public void setDomicilio(String string) {
		domicilio = new String(string);
	}

	public void setEmail(String string) {
		email = new String(string);
	}

	public void setFecha_nac(String string) {
		fecha_nac = new String(string);
	}

	public void setNombre(String string) {
		nombre = new String(string);
	}

	public void setTelefono(String string) {
		telefono = new String(string);
	}

	public void setIdCiudad(int id_c){
		id_ciudad = id_c;
	}
	// OBTENER UN CLIENTE DE LA BASE DE DATOS *************
	
	public static Cliente getCliente(int id){
		try{
			Statement st = Conexion.getStatement();
			String sentencia = "SELECT * FROM cliente WHERE id_cliente = "+id;
			ResultSet rs = st.executeQuery(sentencia);
			
			if( rs.next() )
				return new Cliente(rs.getInt("id_cliente"), rs.getString("nombre"),
						   rs.getString("dni"), rs.getString("domicilio"), 
						   rs.getString("telefono"), rs.getString("email"),
						   rs.getString("fecha_nac"), rs.getInt("id_ciudad"));
		}
		catch(SQLException e){
			System.out.println(e.getMessage());
		}
		return null;
	}

	public static Cliente getCliente(String dni){
		try{
			Statement st = Conexion.getStatement();
			String sentencia = "SELECT * FROM cliente WHERE dni = '"+dni+"'";
			ResultSet rs = st.executeQuery(sentencia);
			
			if( rs.next() )
				return new Cliente(rs.getInt("id_cliente"), rs.getString("nombre"),
						   rs.getString("dni"), rs.getString("domicilio"), 
						   rs.getString("telefono"), rs.getString("email"),
						   rs.getString("fecha_nac"), rs.getInt("id_ciudad"));
		}
		catch(SQLException e){
			System.out.println(e.getMessage());
		}
		return null;
	}

	public static Vector getClientes(){
		Vector clientes = null;
		try{
			Statement st = Conexion.getStatement();
			String sentencia = "SELECT * FROM cliente ORDER BY nombre";
			ResultSet rs = st.executeQuery(sentencia);
			
			while( rs.next() ){
				if( clientes == null ) clientes = new Vector();
				clientes.addElement(new Cliente(rs.getInt("id_cliente"),
									rs.getString("nombre"), rs.getString("dni"),
									rs.getString("domicilio"), rs.getString("telefono"), rs.getString("email"),
						   			rs.getString("fecha_nac"), rs.getInt("id_ciudad")));
			}
		}
		catch(SQLException e){
			System.out.println(e.getMessage());
		}
		return clientes;
	}
	
	// GUARDAR DATOS EN LA BASE DE DATOS ******************
	
	public int guardarDatos(){
		try{
			Statement st = Conexion.getStatement();
			String sentencia;
			if( this.id_cliente == 0 ){
				sentencia = "INSERT INTO cliente VALUES(0,'"+this.nombre+
							"','"+this.domicilio+"','"+this.telefono+"','"+
							this.email+"','"+this.fecha_nac+"','"+this.dni+"',"+							this.id_ciudad+")";
				st.executeUpdate(sentencia);
				ResultSet rs = st.getGeneratedKeys();
				if( rs.next() ) this.id_cliente = rs.getInt(1);
			}
			else{
				sentencia = "UPDATE cliente SET nombre = '"+this.nombre+
							"', domicilio = '"+this.domicilio+"', dni = '"+
							this.dni+"', telefono = '"+this.telefono+
							"', email = '"+this.email+"', fecha_nac = '"+
							this.fecha_nac+"', id_ciudad = "+this.id_ciudad+
							" WHERE id_cliente = "+this.id_cliente;
				st.executeUpdate(sentencia);
			}
		}
		catch(SQLException e){
			System.out.println(e.getMessage());
		}
		return this.id_cliente;
	}
	
	// ELIMINAR DE LA BASE DE DATOS ***********************
	public boolean eliminar(){
		try{
			if( this.id_cliente == 0 ) return false;
			Statement st = Conexion.getStatement();
			String sentencia = "DELETE FROM cliente WHERE id_cliente = "+this.id_cliente;
			st.executeUpdate(sentencia);
			
			return true;
		}
		catch(SQLException e){
			System.out.println(e.getMessage());
		}
		return false;
	}
}
 